Skip to content

mbp-1043: Client Assertion based authentication using Entra ID#155

Merged
sabre1041 merged 3 commits into
validatedpatterns:mainfrom
mlorenzofr:mbp-1043
Jul 16, 2026
Merged

mbp-1043: Client Assertion based authentication using Entra ID#155
sabre1041 merged 3 commits into
validatedpatterns:mainfrom
mlorenzofr:mbp-1043

Conversation

@mlorenzofr

Copy link
Copy Markdown
Collaborator

Summary

  • Add client assertion authentication support for Azure Entra ID in qtodo
  • Refactor qtodo Helm chart to support multiple OIDC providers (keycloak and entraid) with provider-specific configuration
  • Add automation scripts for Entra ID setup for qtodo, RHTPA, and RHTAS
  • Update documentation with Entra ID integration guide

Changes

Helm templates and helpers:

  • Refactor qtodo.oidc.url helper to support Entra ID tenant-specific URLs
  • Refactor qtodo.jwt.audience helper to handle Entra ID audience format

Automation scripts:

  • Add scripts/entraid/setup-qtodo-entraid.sh: automated qtodo app registration
  • Add scripts/entraid/setup-rhtas-entraid.sh: automated RHTAS app registration
  • Add scripts/entraid/setup-rhtpa-entraid.sh: automated RHTPA API and frontend app registrations
  • Add scripts/entraid/cleanup-entraid.sh: cleanup script for removing Entra ID resources created by setup scripts

Feature configuration:

  • Update scripts/features/entra-id.yaml with qtodo, RHTPA, and RHTAS Entra ID overrides
  • Add Vault secret templates for Entra ID client credentials and tenant configuration

Chart values:

  • Update charts/qtodo/values.yaml with Entra ID provider settings

Documentation:

  • Expand docs/oidc/entraid.md with:
    • Architecture overview and authentication flow
    • Prerequisites (Azure subscription, permissions, az CLI)
    • Step-by-step app registration process
    • Federated credential configuration for SPIFFE workload identities
    • Values file configuration examples

Dependencies

validatedpatterns-demos/qtodo#8

Test plan

  • Verify qtodo Helm chart renders correctly with Entra ID provider configuration
  • Verify automation scripts create app registrations with correct federated credentials
  • End-to-end authentication flow with Entra ID (pending qtodo app changes)
  • Test cleanup script removes all created resources

Signed-off-by: Manuel Lorenzo <mlorenzofr@redhat.com>

@p-rog p-rog left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

I have only one concern related to the ACS and Entra ID federation support. Is there a reason why ACS has been removed from the scope? Users switching from Keycloak to Entra ID would lose ACS SSO.

ACS supports Entra ID integration:
https://docs.redhat.com/en/documentation/red_hat_advanced_cluster_security_for_kubernetes/4.11/html-single/integrating/index#azure-entra-id-federation-overview_integrate-using-short-lived-tokens

@mlorenzofr

Copy link
Copy Markdown
Collaborator Author

LGTM

I have only one concern related to the ACS and Entra ID federation support. Is there a reason why ACS has been removed from the scope? Users switching from Keycloak to Entra ID would lose ACS SSO.

ACS supports Entra ID integration: https://docs.redhat.com/en/documentation/red_hat_advanced_cluster_security_for_kubernetes/4.11/html-single/integrating/index#azure-entra-id-federation-overview_integrate-using-short-lived-tokens

Integration with Azure Entra ID was planned for the qtodo, RHTAS, and RHTPA components. ACS was not added, possibly because the component was not yet integrated into the pattern when this planning was done.

In this specific case, the feature being added is client assertion support for qtodo, which already had its integration with Azure Entra ID implemented but using a client secret.

Note that these integrations with Azure Entra ID are not intended to integrate the pattern compatible with Azure's own resources (or other cloud resources). The goal is to provide support for an additional IdP, besides RHBK, which is the default IdP included with the pattern.

@p-rog

p-rog commented Jul 15, 2026

Copy link
Copy Markdown
Collaborator

LGTM
I have only one concern related to the ACS and Entra ID federation support. Is there a reason why ACS has been removed from the scope? Users switching from Keycloak to Entra ID would lose ACS SSO.
ACS supports Entra ID integration: https://docs.redhat.com/en/documentation/red_hat_advanced_cluster_security_for_kubernetes/4.11/html-single/integrating/index#azure-entra-id-federation-overview_integrate-using-short-lived-tokens

Integration with Azure Entra ID was planned for the qtodo, RHTAS, and RHTPA components. ACS was not added, possibly because the component was not yet integrated into the pattern when this planning was done.

In this specific case, the feature being added is client assertion support for qtodo, which already had its integration with Azure Entra ID implemented but using a client secret.

Note that these integrations with Azure Entra ID are not intended to integrate the pattern compatible with Azure's own resources (or other cloud resources). The goal is to provide support for an additional IdP, besides RHBK, which is the default IdP included with the pattern.

I see. Thanks for the explanation.
I can think about adding the ACS Entra ID integration as a part of making ACS independent chart.
It's not a blocker for now.

@sabre1041 sabre1041 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added one suggestion. Otherwise it works as expected!

Only question is that there is a "feature" for entra-id. Right now as it stands, it assumes/depends on the supply-chain feature. However, if there is a need to just secure the qtodo app, there is no such feature.

Thoughts on how that might want to be handled or just leave it with the instructions alone?

Comment thread docs/oidc/entraid.md Outdated
Signed-off-by: Manuel Lorenzo <mlorenzofr@redhat.com>
@mlorenzofr

mlorenzofr commented Jul 16, 2026

Copy link
Copy Markdown
Collaborator Author

Added one suggestion. Otherwise it works as expected!

Only question is that there is a "feature" for entra-id. Right now as it stands, it assumes/depends on the supply-chain feature. However, if there is a need to just secure the qtodo app, there is no such feature.

Thoughts on how that might want to be handled or just leave it with the instructions alone?

I've just added a new feature, entra-id-qtodo, to configure Entra ID only for qtodo, ignoring other components

python3 scripts/gen-feature-variants.py --features entra-id-qtodo

I have updated the script documentation in gen-feature-variants.md to reflect these changes

@sabre1041 sabre1041 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One quick question. New feature looks good

Tekton Chains, Pipelines):

```bash
python3 scripts/gen-feature-variants.py --features entra-id-qtodo

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need to port the following over to the standard entra-id feature?

    vault:
      jwt:
        roles:
          - name: qtodo
            audience: api://AzureADTokenExchange
            subject: spiffe://apps.{{ $.Values.global.clusterDomain }}/ns/qtodo/sa/qtodo
            policies:
              - apps-qtodo-jwt-secret

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, good catch. I was making several configuration changes while testing and I forgot this one

Signed-off-by: Manuel Lorenzo <mlorenzofr@redhat.com>

@sabre1041 sabre1041 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@sabre1041
sabre1041 merged commit 495fba8 into validatedpatterns:main Jul 16, 2026
3 checks passed
@mlorenzofr
mlorenzofr deleted the mbp-1043 branch July 16, 2026 14:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants